package com.yidu.hbatsams.service;

import com.yidu.hbatsams.dao.AtsBaseItemMapper;
import com.yidu.hbatsams.dao.AtsDataBatchMapper;
import com.yidu.hbatsams.dao.AtsDataMapper;
import com.yidu.hbatsams.domain.AtsBaseItem;
import com.yidu.hbatsams.domain.AtsData;
import com.yidu.hbatsams.domain.AtsDataBatch;
import com.yidu.hbatsams.domain.vo.UserVo;
import com.yidu.hbatsams.utils.Message;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Service
public class AtsDataServiceImpl implements AtsDataService{


    /**
     * 指标dao
     */
    @Resource
    private AtsDataBatchMapper atsDataBatchMapper;

    /**
     * 实际数据录入dao
     */
    @Resource
    private AtsDataMapper atsDataMapper;

    /**
     * 数据批次dao
     */
    @Resource
    private AtsBaseItemMapper atsBaseItemMapper;

    /**
     * 根据批次ID查询对应实际数据
     * @param batchId 根据批次ID
     * @return 实际数据集合
     */
    @Override
    public List<AtsData> atsDataByIdBatch(Integer batchId) {
        return atsDataMapper.selectByPrimaryKeyAll(batchId);
    }

    /**
     * 存入实际指标数据
     * @param request 请求
     * @param atsDatas 所有指标数据
     * @param atsDataBatch 数据批次
     * @return 存储状态
     */
    @Override
    public Message addAtsData(HttpServletRequest request, String[] atsDatas, AtsDataBatch atsDataBatch) {
        //获取用户会话
        HttpSession session =request.getSession();
        UserVo managerModel= (UserVo) session.getAttribute("user");
        int rows;
        //状态
        Message message=new Message();
        //设置日期格式
        SimpleDateFormat second=new SimpleDateFormat("yyyy-MM-dd");
        // 获取当前日期字符串
        Date d = new Date();

        //用于判断是否有暂存数据
        if(atsDataBatch.getBatchId()!=null && atsDataBatch.getBatchId()>0){
            AtsDataBatch atsDataBatch1=atsDataBatchMapper.selectByPrimaryKey(atsDataBatch.getBatchId());
            atsDataBatch1.setIsva(atsDataBatch.getIsva());
            atsDataBatch1.setAthleteId(atsDataBatch.getAthleteId());
            atsDataBatch1.setAthleteName(atsDataBatch.getAthleteName());
            atsDataBatch1.setBatchName(atsDataBatch.getBatchName());
            rows=atsDataBatchMapper.updateByPrimaryKey(atsDataBatch1);
            if(rows>0){
//                 logger.info(atsDataBatch.getBatchId()+"数据批次ID（增加完成之后）");
                rows= atsDataMapper.deleteByPrimaryKeyAll(atsDataBatch.getBatchId());
                return addAtsDatas(atsDatas,atsDataBatch.getBatchId(),rows,d,message,managerModel);
            }else{
                message.setNum(0);
                message.setMsg("修改失败");
                return message;
            }
        }else{
            atsDataBatch.setYear(second.format(d).split("-")[0]);
            atsDataBatch.setMonth(second.format(d).split("-")[1]);
            atsDataBatch.setBatchDate(second.format(d));
            atsDataBatch.setCreater(managerModel.getUserName());
            atsDataBatch.setCreatTime(d);
            atsDataBatch.setRemark(managerModel.getClerkId());
            //存入批次表
            rows=atsDataBatchMapper.insert(atsDataBatch);
            if(rows>0){
//                 logger.info(atsDataBatch.getBatchId()+"数据批次ID（增加完成之后）");
                return addAtsDatas(atsDatas,atsDataBatch.getBatchId(),rows,d,message,managerModel);
            }else{
                message.setNum(0);
                message.setMsg("新增失败");
                return message;
            }
        }
    }
    /**
     * 新增实际数据录入
     * @param atsDatas 所有指标数据
     * @param atsDataBatch 数据批次
     * @param rows 回执函书
     * @param d 当前时间
     * @param message 状态
     * @return 返回状态
     */
    private Message addAtsDatas(String[] atsDatas, Integer atsDataBatch,int rows,Date d,Message message,UserVo managerModel){
        if(atsDatas!=null){
            //前台数据循环存储
            for (String atsDatum : atsDatas) {

                //分割前台数据
                String[] atsBaseItems=atsDatum.split("_");
                //查询指标
                AtsBaseItem atsBaseItem=atsBaseItemMapper.selectByPrimaryKey(Integer.valueOf(atsBaseItems[0]));
                //创建实际指标录入
                AtsData atsData=new AtsData();
                atsData.setBatchId(atsDataBatch);
                atsData.setItemId(atsBaseItem.getItemId());
                atsData.setItemName(atsBaseItem.getItemExp());
                atsData.setValueFact(Double.valueOf(atsBaseItems[1]));
                atsData.setCreater(managerModel.getUserName());
                atsData.setCreatTime(d);
                atsData.setIsva(1);
                //存入实际指标录入表
                rows=atsDataMapper.insert(atsData);
                if(rows==0){
                    break;
                }
            }
        }
        if(rows>0){
            message.setNum(1);
            message.setMsg("新增成功");
            return message;
        }else{
            message.setNum(0);
            message.setMsg("新增失败");
            return message;
        }
    }
}
